<?xml version="1.0" encoding="UTF-8"?>
<doc>
<title>预处理指令(preprocessor)</title>

<para>
<ptitle>预处理指令(preprocessor)</ptitle>
　TJS2 可以对 <kw>条件编译表达式</kw> ( 相当于 C 中的 #if 和 #endif 的东西 ) 进行处理。也就是说，可以在脚本(script)被实际执行之前进行处理，依照条件只解释脚本中想要解释的一部分，而对其他部分不进行解释。<r/>
　件编译表达式的书写风格和 C 中的预处理指令不同，是在哪里都能写的自由风格。并不是像 C 中那样每行只能写一条指令。<r/>
</para>

<para>
<ptitle>@set 指令</ptitle>
　@set 指令会对条件编译表达式求值，并将结果忽略掉。格式如下。
<bq>
	@set(表达式)<r/>
</bq>
　在“表达式”那个位置书写条件编译表达式。这里可以使用下面的这些运算符。<r/>
<bq>
	,  =  !=  ==  ||  &amp;&amp;  |  ^  &amp;  &lt;  &gt;  &lt;=  &gt;=  +  -  %  *  /  !  +  -  ( )<r/>
</bq>
　这些运算符的作用请参考 <link href="expr_and_op"/> 。但是，条件编译表达式中只能处理整数。<r/>
　可以使用任意的变量和常量。变量名的命名和 <link href="token"/> 中的变量和常量适用相同的命名规则。<r/>
　但是，预处理指令中使用的变量和 TJS2 脚本中使用的变量名并不互相影响 ( 并不共享同一个名字空间 )。<r/>
</para>

<para>
<ptitle>@if 指令, @endif 指令</ptitle>
　@if 会对条件编译表达式求值，结果为 0 的话，到下一个 @endif 为止，这之间的脚本不会被解释。结果不是 0 则会解释这些脚本。<r/>
　格式如下。<r/>
<bq>
	@if(表达式)              ...         @endif<r/>
</bq>
	在“表达式”那个位置指定条件编译表达式。 @if ～ @endif 可以欠套。<r/>
<r/>
<example>
	@if(flag==0)  // 还没有被代入任何值的变量在这里会被看作是 0<r/>
		@set(flag=1)<r/>
		****<r/>
	@endif<r/>
	// ↑  写在 **** 部分的脚本只会被解释一次<r/>
<r/>
	@if(version&gt;=0x02040009)<r/>
		@if(flag)<r/>
			****<r/>
		@endif<r/>
	@endif <r/>
	// ↑ version 在 0x02040009 (2.4.9) 以上且 flag 不为 0 的时候会解释 **** 部分的脚本<r/>
</example>
</para>

<para>
<ptitle>已定义的变量</ptitle>
　<kw>version</kw> 变量代表当前的 TJS2 的版本。<r/>
<r/>
　该变量为16进制的 0x0XYYZZZZ 形式的数值， X 的部分是主版本号，YY 的部分是副版本号， ZZZZ 是发布序号。例如 0x02040009 的话，版本就是 2.4.9 。
</para>
</doc>
